"""
容器的常用操作
"""

# 序列的切片: 列表、元组、字符串
# 语法: 序列[起始下标:结束下标:步长]
mylist = [11, 22, "1234567", 44, 55, 66]
result = mylist[1:3]
print(result)

result = mylist[:]  # 省略起始和结束下标默认从头到尾
print(result)

result = mylist[::2]
print(result)

result = mylist[::-1]  # 相当于反转
print(result)

# 切片的链式写法
result = mylist[::-1][3][0:4][2:0:-1]  # 反转 取下标为3的元素 取0到4 反向从2取到1
print(result)


# len max min
my_list = [1, 2, 3, 4, 66, 5, 2]
my_str = "abcdiiiehsb"
my_tuple = (2, 3, 5, 1, 2)
my_set = {'a', 'g', 'e', 'b'}
my_dict = {"tom": 666, "timi": 555, "mihoyo": 999}
print(len(my_list), len(my_str), len(my_tuple), len(my_set), len(my_dict))
print(max(my_list), max(my_str), max(my_tuple), max(my_set), max(my_dict))
print(min(my_list), min(my_str), min(my_tuple), min(my_set), min(my_dict))

# 容器转换
# 转列表
print(list(my_list))
print(list(my_str))  # 单个字符为一个元素
print(list(my_tuple))
print(list(my_set))
print(list(my_dict))  # 每个key为一个元素

# 转元组
print(tuple(my_list))
print(tuple(my_str))  # 单个字符为一个元素
print(tuple(my_tuple))
print(tuple(my_set))
print(tuple(my_dict))  # 每个key为一个元素

# 转字符串
print(str(my_list))  # "[1, 2, 3, 4, 66, 5, 2]"
print(str(my_str))  # "abcdiiiehsb"
print(str(my_tuple))  # "(2, 3, 5, 1, 2)"
print(str(my_set))  # "{'e', 'g', 'a', 'b'}"
print(str(my_dict))  # "{'tom': 666, 'timi': 555, 'mihoyo': 999}"  # key和value都保留

# 转set  # 会去重并且无序
print(set(my_list))
print(set(my_str))  # 单个字符为一个元素
print(set(my_tuple))
print(set(my_set))
print(set(my_dict))  # 每个key为一个元素

# 无法转dict

# 排序功能
# 排序后会成为列表
print(sorted(my_list))
print(sorted(my_str))
print(sorted(my_tuple))
print(sorted(my_set))
print(sorted(my_dict))  # 只有key

# 反向排序
print(sorted(my_list, reverse=True))
print(sorted(my_str, reverse=True))
print(sorted(my_tuple, reverse=True))
print(sorted(my_set, reverse=True))
print(sorted(my_dict, reverse=True))  # 只有key

# 列表自定义排序
mylist = [["a", 33], ["b", 55], ["c", 11]]

# key为排序函数，返回排序依据 reverse为True则从大到小降序排序
mylist.sort(key=lambda element: element[1], reverse=True)
print(mylist)
